講Promise之前我們必須先了解同步與異步。
同步vs異步:
同步(Synchronous)和異步(Asynchronous)是兩種不同的程式執行方式。
Promise 是現代 JavaScript 中異步編程的基礎。Promise 是一個由asynchronous function所retumn的物件,主要功能是,Promise 會代理一個建立時不用預先得知結果的值。
Promise物件有三種可能的狀態:
當一個Promise處於擱置狀態時,在一段時間內可以變成fulfilled或rejected狀態。當這種轉換發生時,透過then方法繫結的回調(callback)將被調用。
有點抽象對吧,我們就用例子說明吧:
let fetchPromise = fetch("https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json"
); //會向這個URL發出請求,而fetchPromise會是一個Promise物件
console.log(fetchPromise); //在這邊會先得到Pending的狀態
fetchPromise.then((response) => { //使用.then()就可以得到它Fulfilled時回傳的物件
console.log(response);
});
我們可以改成這樣來看裡面的data是什麼
fetchPromise
.then((response) => {
//這邊用.json()讓這個Promise物件轉換為JavaScript的Object,以便我們查看資料
return response.json(); //如果直接print這個,會出現Pending的狀態,所以要再串一個.then(),等它變成Fulfilled狀態
})
.then((data) => { //這邊的data就會是response轉為json後的資料
console.log(data);
}).catch(e =>{ console.log(e)}); //最後用.catch來處理錯誤